"""
########################################
文件描述：处理嵌套字典数据，将字典中所有key和value取出。
########################################
"""
import common.com_request
import common.com_excel


class get_dict():
    # 定义存放key和value的字典
    dict_r = {}

    def get_dict_allkeys(self, dict_a):
        # 判断参数是否为字典
        if isinstance(dict_a, dict):
            # 迭代取出dict_a中的key和value
            for x in range(len(dict_a)):
                # 取出所有key，存放在列表a中
                a = list(dict_a.keys())
                # 取出a列表中的key，用x控制
                temp_key = a[x]
                # 取出dict_a中key = temp_key的value
                temp_value = dict_a[temp_key]
                # 在dict_r中新增temp_key，并赋值temp_value
                self.dict_r[temp_key] = temp_value
                # 以下语句块实现函数自调用循环，将dict_a字典中所有外部和内部嵌套的key和value都取出
                d = temp_value
                # print('type of d:', type(d))
                # 函数自调用循环，当取出d这个字典后，再次执行函数代码，此时d就是dict_a
                self.get_dict_allkeys(d)
        # json中存在如{'a':[{'b':'1','c':'2'},{'d':'3','c':'4'}]}这种结构，此时a的value是list类型
        # 以下代码即从list中取出所有key和value
        # 判断是否为list类型
        elif isinstance(dict_a, list):
            # 循环取出list中的元素
            for k in dict_a:
                # 判断k是否为字典
                if isinstance(k, dict):
                    # 以下与上方的字典遍历逻辑相同
                    for x in range(len(k)):
                        b = list(k.keys())
                        temp_key = b[x]
                        temp_value = k[temp_key]
                        self.dict_r[temp_key] = temp_value
                        r = temp_value
                        self.get_dict_allkeys(r)
        # 函数返回dict_r
        # print(self.dict_r)
        return self.dict_r

    def get_dict(self, dict_b):
        # 判断参数是否为字典
        if isinstance(dict_b, dict):
            # 迭代取出dict_a中的key和value
            for x in range(len(dict_b)):
                # 取出所有key，存放在列表a中
                a = list(dict_b.keys())
                # 取出a列表中的key，用x控制
                temp_key = a[x]
                # 取出dict_a中key = temp_key的value
                temp_value = dict_b[temp_key]
                # 在dict_r中新增temp_key，并赋值temp_value
                self.dict_r[temp_key] = temp_value
                # 以下语句块实现函数自调用循环，将dict_a字典中所有外部和内部嵌套的key和value都取出
                d = temp_value
                # print('type of d:', type(d))
                # 函数自调用循环，当取出d这个字典后，再次执行函数代码，此时d就是dict_a
                self.get_dict_allkeys(d)
        # json中存在如{'a':[{'b':'1','c':'2'},{'d':'3','c':'4'}]}这种结构，此时a的value是list类型
        # 以下代码即从list中取出所有key和value
        # 判断是否为list类型
        elif isinstance(dict_b, list):
            # 循环取出list中的元素
            for k in dict_b:
                # 判断k是否为字典
                if isinstance(k, dict):
                    # 以下与上方的字典遍历逻辑相同
                    for x in range(len(k)):
                        b = list(k.keys())
                        temp_key = b[x]
                        temp_value = k[temp_key]
                        self.dict_r[temp_key] = temp_value
                        r = temp_value
                        self.get_dict_allkeys(r)
        # 函数返回dict_r
        # print(self.dict_r)
        return


if __name__ == '__main__':
    # dict01 = {'base': 'http://dev.5ycl.net:30008',
    #         'url': '/Lock/inter_json/user_login',
    #         "params": "{'loginName': '15851959741', 'password': 'e10adc3949ba59abbe56e057f20f883e', 'phoneType': '1'}",
    #         "header": "{'Content-Type':'application/json'}",
    #         'type': 'post'}
    case_data = common.com_excel.Excel().excel_rd('../testcase/testcase-yubin.xlsx', 'user_info')
    l = get_dict()
    for i in case_data:
        res = eval(common.com_request.request(**i).text)
        l.get_dict_allkeys(res)

    # case_data = Excel().excel_rd('../testcase/testcase-yubin.xlsx', 'user_info')
    # extract_data = {}
    # print(case_data)
    # for i in case_data:
    #     step = i['step']
    #     params = i.get('params')
    #     # res = request(**i)

    # print(type(dict01))




